Depending on the type of product you are using, the definitions of ‘Parameter’, ‘IO Logic’, ‘AxisStatus’, etc. may be different. This example is based on ‘Ezi-SERVO2’, so please apply the appropriate value depending on the product you are using.
Example)
FM_EZISERVO2_PARAM // Parameter enum when using 'Ezi-SERVO2'
FM_EZIMOTIONLINK2_PARAM // Parameter enum when using 'Ezi-MOTIONLINK2'
[EN]
This example code is implemented to run on Python 3.x and later. If you use version 3.0 or less, you need to change the print and input functions.
[KR]
이 예제코드는 파이썬 3.x이상에서 동작하도록 구현되어있습니다. 3.0이하 버전에서 사용하실경우 print, input함수의 변형이 필요합니다.
[EN]
1. Connect a device. 2. Check the drive error. 3. Enable Servo. 4. Operate the motor with Push Mode (Non-stop Mode). 5. Monitor obstacle contact during Push Mode operation (10 seconds). 6. Stop Push Mode operation. 7. Operate the motor with the return operation. 8. Close connection.
[KR]
1. 장치 연결. 2. 드라이브 에러 체크. 3. Servo Enable. 4. Push Mode(Non-Stop Mode) 운전 실시. 5. Push Mode 운전 진행 관련 장애물 접촉 감시(10초). 6. Push Mode 운전 정지. 7. 복귀 운전 실시. 8. 연결 해제.
import sys
import os
import platform
try:
= os.path.abspath(
include_path __file__), "..")
os.path.join(os.path.dirname(
)except NameError:
= os.path.abspath(
include_path "..")
os.path.join(os.getcwd(),
)
= platform.architecture()[0]
arch if arch == '64bit':
= os.path.join(include_path, "Include_Python_x64")
library_path else:
= os.path.join(include_path, "Include_Python")
library_path
sys.path.append(library_path)
[EN]
This code adds the appropriate Library folder path according to the Python architecture to import FAS_EziMOTIONPlusE, MOTION_DEFINE, and ReturnCodes_Define modules. If the Library folder is in a different path, enter that path in Library_path.
[KR]
FAS_EziMOTIONPlusE, MOTION_DEFINE, ReturnCodes_Define 모듈들을 Import 하기 위하여 파이썬 아키텍쳐에 따라 알맞은 Library 폴더 경로를 추가하는 코드입니다. Library 폴더가 다른 경로에 있는 경우, library_path에 해당 경로를 입력해 주시기 바랍니다.
# Check Drive's Error
= FAS_GetAxisStatus(nBdID)
status_result, axis_status
if status_result != FMM_OK:
print("Function(FAS_GetAxisStatus) was failed.")
return False
if axis_status & EZISERVO2_AXISSTATUS.FFLAG_ERRORALL:
# if Drive's Error was detected, Reset the ServoAlarm
if FAS_ServoAlarmReset(nBdID) != FMM_OK:
print("Function(FAS_ServoAlarmReset) was failed.")
return False
[EN]
You can check the current drive’s operating status using the FAS_GetAxisStatus() function. You can reset the current drive’s alarm status using the FAS_ServoAlarmReset() function.
[KR]
FAS_GetAxisStatus() 함수를 사용하여 현재 드라이브의 운전 상태를 확인 할 수 있습니다. FAS_ServoAlarmReset() 함수를 사용하여 현재 드라이브의 알람상태를 리셋 할 수 있습니다.
[EN]
EZISERVO2_AXISSTATUS is a structure that organizes drive status values and can be checked in the define file (MOTION_EziSERVO2_DEFINE.py).
[KR]
EZISERVO2_AXISSTATUS 는 드라이브 상태값이 정리된 구조체이며 define파일 (MOTION_EziSERVO2_DEFINE.py)에서 확인하실 수 있습니다.
if FAS_ServoEnable(nBdID, TRUE) != FMM_OK:
print("Function(FAS_ServoEnable) was failed.")
return False
[EN]
You can set the Servo Enable signal of the drive using the FAS_ServoEnable() function.
[KR]
FAS_ServoEnable() 함수를 사용하여 드라이브의 Servo Enable 신호를 설정할 수 있습니다.
# normal position motion
= 1
dwStartSpd = 50000
dwMoveSpd = 500
wAccel = 500
wDecel = 200500
lPosition
# push motion
= 2000
dwPushSpd = 50
wPushRate = 100 # Non-stop Mode Push & 100 pulse draw-back
wPushMode = lPosition + 10000
lEndPosition
if (
FAS_MovePush(
nBdID,
dwStartSpd,
dwMoveSpd,
lPosition,
wAccel,
wDecel,
wPushRate,
dwPushSpd,
lEndPosition,
wPushMode,
)!= FMM_OK
):print("Function(FAS_MovePush) was failed.")
return False
[EN]
With FAS_MovePush() function, you can operate the motor to a desired position with a specified force. For your information, there are two operation parts in ‘push mode’. The first one is position control before applying a specified force, and the second one is the force control with the specified force. The position control part can set [start speed, maximum speed, acceleration/deceleration time, absolute position]. The force control part can set [push force ratio, push operation speed, push operation absolute position, push operation mode].
[KR]
FAS_MovePush() 함수를 사용하여 특정 위치에서 지정된 힘을 유지하며 이동할 수 있다. 더하여 PUSH MODE 운전은 힘을 가하기 이전 움직임에 대한 설정 [시작속도, 최대속도, 가감속 시간, 절대 위치]을 할 수 있으며, 힘을 가하는 운전에 대한 설정 [PUSH 힘 비율, Push 운전 속도, PUSH 운전 절대 위치, PUSH 운전 모드]또한 할 수 있습니다.
= FAS_GetActualPos(nBdID)
status_result, lActPos if status_result != FMM_OK:
print("Function(FAS_GetActualPos) was failed.")
return False
[EN]
You can find out the current absolute position of the motor using the FAS_GetActualPos() function.
[KR]
FAS_GetActualPos() 함수를 사용하여 현재 모터의 절대위치값을 파악할 수 있습니다.
= FAS_GetIOOutput(nBdID)
status_result, dwOutput if status_result != FMM_OK:
print("Function(FAS_GetIOOutput) was failed.")
return False
print(
"Position %d : %s" % (
lActPos,"Work Detected!" if dwOutput & SERVO2_OUT_BITMASK_PUSHDETECT else "Work Not Detected"
) )
[EN]
You can check the status of the IO output pin through the FAS_GetIOOutput() function. In addition, EZISERVO2_OUTLOGIC is a structure that organizes the meaning of the IO output status, and outputs the BIT_RESERVED0 signal when an obstacle is detected in PUSH operation.
[KR]
FAS_GetIOOutput() 함수를 통하여 IO 출력핀의 상태를 확인 할 수 있습니다. 더하여 EZISERVO2_OUTLOGIC는 IO 출력 상태 의미를 정리한 구조체이며, PUSH 운전에서 장애물 감지시 BIT_RESERVED0 신호를 출력하게 됩니다.
[EN]
EZISERVO2_OUTLOGIC can be found in the define file (MOTION_EziSERVO2_DEFINE.py).
[KR]
EZISERVO2_OUTLOGIC는 define파일(MOTION_EziSERVO2_DEFINE.py)에서 확인하실 수 있습니다.
# Check the Axis status while 10 Seconds.
= time.time() * 1000 + 10 * 1000
dwEndTime
while True:
0.001)
time.sleep(
= FAS_GetActualPos(nBdID)
status_result, lActPos if status_result != FMM_OK:
print("Function(FAS_GetActualPos) was failed.")
return False
= FAS_GetIOOutput(nBdID)
status_result, dwOutput if status_result != FMM_OK:
print("Function(FAS_GetIOOutput) was failed.")
return False
print(
"Position %d : %s" % (
lActPos,"Work Detected!" if dwOutput & SERVO2_OUT_BITMASK_PUSHDETECT else "Work Not Detected"
)
)
if time.time() * 1000 >= dwEndTime:
break
[EN]
The time.time() function measures the time elapsed since the system started, and can be used to set a time to monitor the status of the motor.
[KR]
time.time 함수는 시스템이 시작한 시점부터 소요된 시간을 측정하며 이를 응용하여 모터의 상태를 감시하는 시간을 설정할 수 있다.
if FAS_MoveStop(nBdID) != FMM_OK:
print("Function(FAS_MoveStop) was failed.")
[EN]
You can stop a running motor using the FAS_MoveStop() function.
[KR]
FAS_MoveStop() 함수를 사용하여 동작중인 모터를 정지 할 수 있습니다.
while True:
0.001)
time.sleep(= FAS_GetAxisStatus(nBdID)
status_result, axis_status
if status_result != FMM_OK:
print("Function(FAS_GetAxisStatus) was failed.")
return False
if not (axis_status & EZISERVO2_AXISSTATUS.FFLAG_MOTIONING):
break
[EN]
The FAS_GetAxisStatus() function indicates the drive status value. The user can use it to check the status and wait until a specific status value is confirmed. In addition, the user can check whether the push mode operation is completed with the values FFLAG_MOTIONING (‘0’).
[KR]
드라이브의 운전 상태값을 나타내는 FAS_GetAxisStatus() 함수를 사용하여 사용자가 원하는 특정상태 값이 확인 될 때까지 대기할 수 있습니다. 더하여 PUSH 모드 동작 완료 상태는 FFLAG_MOTIONING (‘0’)값으로 확인 할 수 있습니다.
[EN]
1. For function descriptions on device connection and disconnection, please refer to the [01.ConnectionExam] project document. 2. For function descriptions on relative position movement operation, please refer to the [07.MoveAbsIncPosExam] project document.
[KR]
1. 장치 연결 및 해제에 대한 함수 설명은 [01.ConnectionExam] 프로젝트 문서를 참고하시기 바랍니다. 2. 상대 위치 이동 운전에 대한 함수 설명은 [07.MoveAbsIncPosExam] 프로젝트 문서를 참고하시기 바랍니다.